Talendでデータの移行をやってみる
はじめに
こんにちは、Yuraです。 業務でTalendで作られたプログラムを触ることはあるものの、私の場合修正作業がほとんどです。 今後の為に、勉強も兼ねて自分でも何か作ってみようと思いました。 今回は、Talendを使いMySQLからPostgreSQLへのデータ移行をTalendを使って、やってみたというだけなのですが。。。
環境
作業環境は以下の通りです。 Windows 8.1 Talend 5.6.2(Javaのバージョンが1.8だと起動しないので注意) MySQL 5.7 PostgreSQL 9.5.2
移行用テーブルの用意
移行用のテーブルとして、MySQLに適当にデータベースとテーブルを作成して、データを入れておきます。 私が使ったサンプルを置いておきます。
CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(64) DEFAULT NULL, `created_date` datetime NOT NULL, `updated_date` datetime NOT NULL, PRIMARY KEY (`id`) ); INSERT INTO `user` VALUES (1,'新宿 太郎','2016-05-19 15:34:20','2016-05-19 16:50:25'),(2,'新大久保 二郎','2016-05-20 15:34:20','2016-05-20 16:50:25'),(3,'品川 三郎','2016-05-21 15:34:20','2016-05-21 16:50:25'),(4,'池袋 四郎','2016-05-22 15:34:20','2016-05-22 16:50:25'),(5,'五反田 五郎','2016-05-23 15:34:20','2016-05-23 16:50:25'),(6,'恵比寿 六郎','2016-05-24 15:34:20','2016-05-24 16:50:25'),(7,'上野 七郎','2016-05-25 15:34:20','2016-05-25 16:50:25'),(8,'神田 八郎','2016-05-26 15:34:20','2016-05-26 16:50:25'),(9,'新橋 九郎','2016-05-27 15:34:20','2016-05-27 16:50:25'),(10,'秋葉原 十郎','2016-05-28 15:34:20','2016-05-28 16:50:25');
ジョブ作成
Talendを起動しプロジェクトを開きます。 まずは、DB接続情報を作成しておきましょう。 メタデータのDB接続を右クリックし、DB接続の作成をします。 DB情報を入力します。
警告が出ていますが、目的が空欄のままでも作れます。 PostgreSQLの接続情報も同じように作ります。
次は、ジョブの作成を行います。 今回はuserテーブルの移行を行うので、userというジョブを作ります。 ジョブを右クリックして新規ジョブを選び、userジョブを作成してください。 ジョブが作成出来たら、パレットから必要なコンポーネントを配置していきます。 まずは、tMysqlInputを配置します。
配置したtMysqlInputを選択し、コンポーネントビューのプロパティタイプをリポジトリに変更し、リポジトリの内容を先ほど作成したMySQLのDB接続情報にします。 テーブル名を"user"、クエリを以下の様に編集します。
select * from user
これで、MySQLからデータを取得できます。
次に、tPostgresqlInputを配置します。
tMysqlInputの時と同様に、プロパティタイプをリポジトリに変更し、接続情報を入力してください。 テーブルに対する操作は、データの移行なので、『テーブルが存在する場合、削除してから作成』としています。 データ操作は『挿入』を選択します。
先ほど配置したtMysqlInputを右クリックし、Row→メインを選択し、2つのコンポーネントをつなげます。 つなげた矢印を選択し、コンポーネントビューからスキーマの編集をします。 テーブルの情報に合わせて入力します。
これで、ひとまずジョブの作成は完了です。 ジョブの実行をしてみます。
ジョブが実行されたらPostgreSQL側にデータが正しく入っていることを確認します。
おわりに
簡単にデータ移行ができてしまいました。 移行するテーブルの数が多いと、それだけの数のジョブを作成しないといけないのでそれはそれで面倒かとは思いますが。。。 Talend使いとして日々精進していくために、これからも覚えたことをブログでアウトプットしていけたらと思います。